﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DomainModel.Abstract;
using DomainModel.Concrete;
using DomainModel;
using System.Web.Security;
using System.Net.Mail;
using Common;

namespace OrdersSystem.Controllers
{
    public class LoginController : Controller
    {
        private User user = null;

        public LoginController()
        {
        }

        public ViewResult List()
        {
            return View(Repositories.UserRepository.Users.ToList());
        }

        public ViewResult AskLogin()
        {
            return View();
        }


        public ActionResult Register()
        {
            return View();
        }

        public ActionResult ForgetPassword()
        {
            return View();
        }

        public ActionResult SendPassword(string userName)
        {
            User u=Repositories.UserRepository.GetUser(userName);
            if (u==null)
            {
                this.ViewData["MessageField"] = "Пользователь не зарегестрирован в системе.";
                return View("ForgetPassword");
            }
            MailSender.SendPassword(u.Email, u.Password);

            this.ViewData["MessageField"] = "Пароль выслан.";
           
            return View("AskLogin");
        }

        [HttpPost]
        public ActionResult Register(User u)
        {
            if (ModelState.IsValid)
            {
                if (Repositories.UserRepository.CheckUser(u.Login))
                {
                    ModelState["Login"].Errors.Add("Пользователь с таким именем уже зарегестрирован");
                    return View();
                }
                u.rf_UserID = Repositories.UserRepository.GetManagerId(u.ManagerMail);
                if (u.rf_UserID < 0)
                {
                    ModelState["ManagerMail"].Errors.Add("Менеджера с таким E-Mail не существует");
                    return View();                
                }
                u.rf_RoleID = 3;
                Repositories.UserRepository.Add(u);
                Repositories.UserRepository.Save();
                this.ViewData["MessageField"] = "Пользователь успешно зарегестрирован.";
                return View("AskLogin");
            }
            else
                return View();
        }

        public ActionResult LogOut()
        {
            FormsAuthentication.SignOut();
            return View("AskLogin");
        }

        private void RedirectFromLoginPage(string userName, string ReturnUrl)
        {
            FormsAuthentication.SetAuthCookie(userName, false);

            if (!string.IsNullOrEmpty(ReturnUrl)&&(ReturnUrl!="/"))
                Response.Redirect(ReturnUrl);
            else
                Response.Redirect(FormsAuthentication.DefaultUrl);
        }
        
        private bool IsValidLoginArgument(string userName, string password)
        {
            return (!string.IsNullOrEmpty(userName)) && (!string.IsNullOrEmpty(password));
        }

        public ActionResult TryGetUser(string userName, string password, string returnURL)
        {
            if (IsValidLoginArgument(userName,password))
                user = Repositories.UserRepository.GetUser(userName, password);
            
            if (user != null)
            {
                if (user.IsAdmin)
                    Session["Admin"] = 1;
                else
                    Session.Remove("Admin");
                 RedirectFromLoginPage(userName, returnURL);       
            }else
            {
                  this.ViewData["MessageField"] = "Ошибка входа! Неверное имя пользователя или пароль.";           
            }
            return View("AskLogin");
        }

    }
}
